package com.vspuzzle;

class class_Game15 {
	public int [][] matrice_gioco = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};
	public static int [][] matrice_ordinata = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};
	public int mosse = 0;
	public long tempo = 0;
	
	public class_Game15(){
		
	}
	
	
/* Controlla se e' possibile muovere la tessera data(x,y) tessera nella posizione data
 * @param int x x della Matrice compreso tra 0 e 3
 * @param int y y della Matrice compreso tra 0 e 3
 * @param char direzione direzione movimento: 'N','E','S','O'*/
	public boolean movimento_1_tessera_consentito(int x,int y, char direzione){
		if(direzione=='N'){
			return mossa_consentita(x, y, x, y-1);
		}
		if(direzione=='E'){
			return mossa_consentita(x, y, x+1, y);
		}
		if(direzione=='S'){
			return mossa_consentita(x, y, x, y+1);
		}
		if(direzione=='O'){
			return mossa_consentita(x, y, x-1, y);
		}
		return false;
	}
	
/* Controlla se e' possibile muovere la tessera data(x,y) tessera nella posizione data, alla tessera sono accodate altre 2 tessere
 * @param int x x della Matrice compreso tra 0 e 3
 * @param int y y della Matrice compreso tra 0 e 3
 * @param char direzione direzione movimento: 'N','E','S','O'*/
	public boolean movimento_2_tessere_consentito(int x,int y, char direzione){
		if(direzione=='N'){
			return mossa_consentita(x, y, x, y-2);
		}
		if(direzione=='E'){
			return mossa_consentita(x, y, x+2, y);
		}
		if(direzione=='S'){
			return mossa_consentita(x, y, x, y+2);
		}
		if(direzione=='O'){
			return mossa_consentita(x, y, x-2, y);
		}
		return false;
	}
		
/* Controlla se e' possibile muovere la tessera data(x,y) tessera nella posizione data, alla tessera sono accodate altre 2 tessere
 * @param int x x della Matrice compreso tra 0 e 3
 * @param int y y della Matrice compreso tra 0 e 3
 * @param char direzione direzione movimento: 'N','E','S','O'*/
		public boolean movimento_3_tessere_consentito(int x,int y, char direzione){
			if(direzione=='N'){
				return mossa_consentita(x, y, x, y-3);
			}
			if(direzione=='E'){
				return mossa_consentita(x, y, x+3, y);
			}
			if(direzione=='S'){
				return mossa_consentita(x, y, x, y+3);
			}
			if(direzione=='O'){
				return mossa_consentita(x, y, x-3, y);
			}
			return false;
		}
	
	
// metodo ausiliario, controlla che matrice_gioco(x,y) ci sia un numero, e in matrice_gioco(nuovaX,nuovaY) ci sia lo zero
	private boolean mossa_consentita(int x,int y,int nuovaX, int nuovaY){
		if(x<0 || x>3) return false;
		if(y<0 || y>3) return false;
		if(nuovaX<0 || nuovaX>3) return false;
		if(nuovaY<0 || nuovaY>3) return false;
		
		if(matrice_gioco[y][x]==0) return false;
		if(matrice_gioco[nuovaY][nuovaX]!=0) return false;
		
		return true;
	}

}
